// #include <iostream>
// #include <signal.h>
// #include "ChatServer.hpp"
// #include "ChatService.hpp"

// using namespace std;
// void reset_handler(int signum){//根据 POSIX 标准，信号处理函数必须遵循特定的函数签名：void handler(int signum)
//     ChatService::instance().reset();
//     cout<<"reset_handler"<<endl;
//     exit(1);
// }

// int main(int argc, char **argv)
// {
//     if (argc < 3)
//     {
//         std::cerr << "Usage: " << argv[0] << " ip port" << std::endl;
//         exit(EXIT_FAILURE);
//     }

//     signal(SIGINT, reset_handler);

//     char *ip = argv[1];
//     uint16_t port = atoi(argv[2]);
//     // ChatServer server(ip, port);

//     EventLoop loop;
//     InetAddress addr(ip,port);
//     // ChatServer::init(loop, addr);
//     ChatServer server(&loop, addr,"chatserver");
    
//     server.start(); //server.start() 创建 4 个子 IO 线程，每个都有自己的 EventLoop
//     //所以 server.start() 只是启动服务组件，而 loop.loop() 才是真正开始监听和处理事件的循环。
//     loop.loop();    // 启动事件循环（阻塞在这里）
//     return 0;
// }


#include <iostream>
#include <signal.h>
#include "ChatServer.hpp"
#include "WebChatService.cpp"  // 添加 WebChatService 头文件
#include "ChatService.hpp"

using namespace std;

void reset_handler(int signum) {
    ChatService::instance().reset();
    cout << "reset_handler" << endl;
    exit(1);
}

int main(int argc, char **argv) {
    if (argc < 3) {
        std::cerr << "Usage: " << argv[0] << " ip port" << std::endl;
        exit(EXIT_FAILURE);
    }

    signal(SIGINT, reset_handler);

    char *ip = argv[1];
    uint16_t port = atoi(argv[2]);

    EventLoop loop;
    InetAddress tcpAddr(ip, port);           // TCP服务地址
    InetAddress httpAddr(ip, port + 1);      // HTTP服务地址（使用不同端口）

    // 创建并启动 WebChatService
    WebChatService webChatService(&loop, tcpAddr, httpAddr);
    webChatService.start();

    loop.loop();  // 启动事件循环
    return 0;
}